#include "stdio.h"
#include "stdlib.h"
#include "assert.h"
#include "err.h"
#include "cintrar.h"

/* Estructura del TAD */
struct scintrar{
	int nodos;
	int aristas;
	tarista arista;
	Bool fin;
	int contador;
};

/* Constructor del TAD */
cintrar cra_create(void){
	cintrar cinta;
	cinta = (cintrar)calloc(1,sizeof(struct scintrar));
	if (cinta != NULL){
                scanf("# %d %d",&(cinta->nodos),&(cinta->aristas));
                getchar();
		cinta->arista = NULL;
		cinta->fin = FALSE;
                cinta->contador = 0;
	}
        else errx(EXIT_FAILURE,"No hay memoria disponible");
	return cinta;
}

/* Arranca la cinta */
void cra_arr(cintrar cra){
        assert(cra != NULL);
        scanf ("graph M {");
        getchar();
}

/* Avanza la cinta */
void cra_av(cintrar cra){
        assert(cra != NULL);
        assert(!cra_fin(cra));
        cra->contador = cra->contador + 1;
        getchar();
}

/* Elemento corriente de la cinta */
tarista cra_elec(const cintrar cra){
        int v1,v2,p;
	assert(cra != NULL);
        scanf(" %i -- %i [label=%i];",&v1,&v2,&p);
        cra->arista = arista_create(v1-1,v2-1,p);
        return cra->arista;
}

/* Determina si la cinta de lectura llegó al final */
Bool cra_fin(const cintrar cra){
	assert(cra != NULL);
        cra->fin = (cra->contador == cra->aristas);
	return cra->fin;
}

/* Retorna la cantidad de vértices de la cinta de lectura */
size_t cra_cantvert(const cintrar cra){
	int r;
	assert(cra != NULL);
	r = cra->nodos;
	return r;
}

/* Retorna la cantidad de aristas de la cinta de lectura */
size_t cra_cantaris(const cintrar cra){
	int r;
	assert(cra != NULL);
	r = cra->aristas;
	return r;
}

/* Destructor del TAD */
cintrar cra_destroy(cintrar cra){
	assert(cra != NULL);
	free(cra);
        cra = NULL;
	return cra;
}
